#Implementara los decoradores de las vistas
#un decorador es una funcion que se ejecuta 
#antes que otra y se invoca con: @nombre_decorador

from django.core.urlresolvers import reverse
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render_to_response
import logging
import functools
from functools import wraps

def login_required(function):
  """Implementation of Django's login_required decorator.
  
  The login redirect URL is always set to request.path
  """
  def login_required_wrapper(request, *args, **kw):
    if request.user.is_authenticated():
      return function(request, *args, **kw)
    return HttpResponseRedirect(users.create_login_url(request.path))
  return login_required_wrapper


def requiere_usuario(func):
    logging.error('llega al decorator..')
    logging.error(func)
    @functools.wraps(func)
    def decorador(request, *args, **kwargs):
        logging.error('**********llega el inner decorator..')
        if 'usuario' in request.session:
            #Devolvemos la funcion que se iba a ejecutar
            logging.error('el usuario existia en sesion, se ejecuta la funcion')
            return func(request, *args, **kwargs)
        else:
            #Nos vamos a una pagina de no_autenticado
            logging.error('el usuario no existia en sesion, nos vamos a no_autenticado.html')
            return render_to_response('no_autenticado.html')
    logging.error('antes del return-->')
    return decorador